home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_SingleOwned.h < prev    next >
C/C++ Source or Header  |  2000-04-06  |  4KB  |  107 lines

  1. #ifndef CB_SINGLE_OWNED_H
  2. #define CB_SINGLE_OWNED_H
  3.  
  4. #include "CB_Single.h"
  5.  
  6. // defines for include files
  7. #define RELATION_TEMPLATE_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  8. public:\
  9.     ClassTo* _ref##NameTo;\
  10. \
  11. protected:\
  12.     void Add##NameTo(ClassTo* item)\
  13.     {\
  14.         METHOD_SINGLE_ADD(ClassFrom, NameFrom, ClassTo, NameTo) \
  15.     }\
  16.     \
  17.     void Remove##NameTo(ClassTo* item)\
  18.     {\
  19.         METHOD_SINGLE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  20.     }\
  21.     \
  22.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  23.     {\
  24.         METHOD_SINGLE_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  25.     }\
  26.     \
  27. public:\
  28.     void Move##NameTo(ClassTo* item)\
  29.     {\
  30.         METHOD_SINGLE_MOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  31.     }\
  32.     \
  33.     ClassTo* Get##NameTo() const {return _ref##NameTo;};
  34.  
  35. #define RELATION_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  36. public:\
  37.     ClassTo* _ref##NameTo;\
  38. \
  39. protected:\
  40.     void Add##NameTo(ClassTo* item);\
  41.     void Remove##NameTo(ClassTo* item);\
  42.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  43. \
  44. public:\
  45.     void Move##NameTo(ClassTo* item);\
  46.     ClassTo* Get##NameTo() const {return _ref##NameTo;};
  47.  
  48. #define RELATION_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  49.     RELATION_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  50.  
  51. // defines implementation
  52. #define INIT_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  53.    INIT_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  54.  
  55. #define EXIT_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  56.     if (_ref##NameTo)\
  57.         delete _ref##NameTo;
  58.  
  59. #define REPLACE_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  60.     REPLACE_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  61.  
  62. #define INIT_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  63.     assert(this);\
  64.     assert(p##NameFrom);\
  65.     assert(p##NameFrom->_ref##NameTo == (ClassTo*)0);\
  66. \
  67.     _ref##NameFrom = p##NameFrom;\
  68.     p##NameFrom->_ref##NameTo = this;
  69.  
  70. #define EXIT_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  71.     EXIT_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  72.  
  73. #define REPLACE_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  74.     assert(this);\
  75.     assert(pOld);\
  76.     assert(pOld->_ref##NameFrom);\
  77.     assert(pOld->_ref##NameFrom->_ref##NameTo == pOld);\
  78. \
  79.     _ref##NameFrom = pOld->_ref##NameFrom;\
  80.     _ref##NameFrom->_ref##NameTo = this;\
  81.     pOld->_ref##NameFrom = (ClassFrom*)0;
  82.  
  83. #define REMOVE_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  84.     if (_ref##NameTo)\
  85.     {\
  86.         (void)new UndoSubDelete(_ref##NameTo);\
  87.     }
  88.  
  89. #define SAVE_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  90.     SAVE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  91.  
  92. #define RESTORE_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  93.     RESTORE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  94.  
  95. #define REMOVE_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  96.     REMOVE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  97.  
  98. #define CLEANUP_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  99.     CLEANUP_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  100.  
  101. #define METHODS_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  102.     METHODS_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) 
  103.  
  104. #define METHODS_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  105.  
  106. #endif
  107.